iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0
自我挑戰組

MCU功能介紹與實作系列 第 12

Day 12: 簡單的MCU應用程式範例

  • 分享至 

  • xImage
  •  

在Day 10有簡單介紹LED閃爍的程式,因此今天我們再加上用按鈕控制LED燈。我們用ATmega328P控制LED燈,其中接三個按鈕,分別的功能為開啟、關閉,以及以間隔1秒鐘閃爍:

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

// 定義按鈕的pin腳
#define OPEN_BUTTON_PIN     2
#define CLOSE_BUTTON_PIN    3
#define FLIP_BUTTON_PIN     4
#define LED_PIN             5

int main(void) {
    // 初始化端口和pin腳
    DDRD = (1 << LED_PIN); // 設置LED pin腳為輸出, PORTD控制LED燈
    PORTB |= (1 << OPEN_BUTTON_PIN) | (1 << CLOSE_BUTTON_PIN) | (1 << FLIP_BUTTON_PIN);
    // PORTBB讀取按鈕狀態
    uint8_t isLedOn = 0; //變數用於控制LED狀態

    while (1) {
        // 檢查按鈕狀態並執行
        if (!(PINB & (1 << OPEN_BUTTON_PIN))) { // 開啟按鈕被按下
            isLedOn = 1; // 打開LED
            PORTD |= (1 << LED_PIN);
        }
        if (!(PINB & (1 << CLOSE_BUTTON_PIN))) { // 關閉按鈕被按下
            isLedOn = 0; // 關閉LED
            PORTD &= ~(1 << LED_PIN);
        }
        if (!(PINB & (1 << FLIP_BUTTON_PIN))) { // 閃爍按鈕被按下
            for (int i = 0; i < 5; i++) {
                PORTD ^= (1 << LED_PIN); // 切換LED狀態
                _delay_ms(1000); // 延遲1秒
            }
        }
    }
    return 0;
}

上一篇
Day 11: 開發工具:IDE、編譯器、模擬器
下一篇
Day 13: 時脈來源、時脈振盪器和時鐘分頻器
系列文
MCU功能介紹與實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言